package main

import "fmt"

// 返回一个“返回int的函数”
// 闭包： 特征：函数的返回值是函数
//       特性：外部函数的变量可供内部函数使用，且外部函数的变量在重新调用函数时不会被重置（类似全局变量）
func fibonacci() (func() int) {
	pre := 0
	next := 1
	tmp := 0
	return func() int {
		pre = tmp
		tmp = next
		next += pre
		return pre
	}
}

func main() {
	f := fibonacci()
	for i:=0;i<10;i++ {
		fmt.Println(f())
	}
	fmt.Println(f())
}